Socket
Socket
Sign inDemoInstall

@esbuild-kit/esm-loader

Package Overview
Dependencies
2
Maintainers
1
Versions
30
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

@esbuild-kit/esm-loader


Version published
Maintainers
1
Created

Package description

What is @esbuild-kit/esm-loader?

@esbuild-kit/esm-loader is an npm package that allows you to use ES modules (ESM) in Node.js environments that do not natively support them. It leverages esbuild to transpile and load ESM code, making it easier to work with modern JavaScript syntax and features.

What are @esbuild-kit/esm-loader's main functionalities?

Transpile ESM to CommonJS

This feature allows you to import and use CommonJS modules in an ESM context. The code sample demonstrates how to use the `createRequire` function to require a CommonJS module in an ESM file.

import { createRequire } from 'module';
const require = createRequire(import.meta.url);
const { exampleFunction } = require('./example-file.js');
exampleFunction();

Load TypeScript files

This feature allows you to directly import and use TypeScript files in your Node.js project. The code sample shows how to import a TypeScript file and call a function from it.

import { exampleFunction } from './example-file.ts';
exampleFunction();

Support for JSX/TSX

This feature enables you to import and use JSX/TSX files in your Node.js project. The code sample demonstrates how to import a TSX file and render a React component.

import React from 'react';
import ReactDOM from 'react-dom';
import App from './App.tsx';

ReactDOM.render(<App />, document.getElementById('root'));

Other packages similar to @esbuild-kit/esm-loader

Readme

Source

esm-loader

Node.js loader for loading TypeScript files.

Features

  • Transforms TypeScript to ESM on demand
  • Classic Node.js resolution (extensionless & directory imports)
  • Cached for performance boost
  • Supports Node.js v12.20.0+
  • Handles node: import prefixes
  • Resolves tsconfig.json paths
  • Named imports from JSON modules

Protip: use with cjs-loader or tsx

esm-loader only transforms ES modules (.mjs/.mts extensions or .js files in module type packages).

To transform CommonJS files (.cjs/.cts extensions or .js files in commonjs type packages), use this with cjs-loader.

Alternatively, use tsx to handle them both automatically.


Premium sponsor banner

Install

npm install --save-dev @esbuild-kit/esm-loader

Usage

Pass @esbuild-kit/esm-loader into the --loader flag.

node --loader @esbuild-kit/esm-loader ./file.ts

TypeScript configuration

The following properties are used from tsconfig.json in the working directory:

  • strict: Whether to transform to strict mode
  • jsx: Whether to transform JSX

    Warning: When set to preserve, the JSX syntax will remain untransformed. To prevent Node.js from throwing a syntax error, chain another Node.js loader that can transform JSX to JS.

  • jsxFactory: How to transform JSX
  • jsxFragmentFactory: How to transform JSX Fragments
  • jsxImportSource: Where to import JSX functions from
  • allowJs: Whether to apply the tsconfig to JS files
  • paths: For resolving aliases
Custom tsconfig.json path

By default, tsconfig.json will be detected from the current working directory.

To set a custom path, use the ESBK_TSCONFIG_PATH environment variable:

ESBK_TSCONFIG_PATH=./path/to/tsconfig.custom.json node --loader @esbuild-kit/esm-loader ./file.ts

Cache

Modules transformations are cached in the system cache directory (TMPDIR). Transforms are cached by content hash so duplicate dependencies are not re-transformed.

Set environment variable ESBK_DISABLE_CACHE to a truthy value to disable the cache:

ESBK_DISABLE_CACHE=1 node --loader @esbuild-kit/esm-loader ./file.ts

Premium sponsor banner

FAQ

Can it import JSON modules?

Yes. This loader transpiles JSON modules so it's also compatible with named imports.

Can it import ESM modules over network?

Node.js has built-in support for network imports behind the --experimental-network-imports flag.

You can pass it in with esm-loader:

node --loader @esbuild-kit/esm-loader --experimental-network-imports ./file.ts

Can it resolve files without an extension?

In ESM, import paths must be explicit (must include file name and extension).

For backwards compatibility, this loader adds support for classic Node resolution for extensions: .js, .json, .ts, .tsx, .jsx. Resolving a index file by the directory name works too.

import file from './file' // -> ./file.js
import directory from './directory' // -> ./directory/index.js

Can it use Node.js's CommonJS resolution algorithm?

ESM import resolution expects explicit import paths, whereas CommonJS resolution expects implicit imports (eg. extensionless & directory imports).

As a result of this change, Node.js changes how it imports a path that matches both a file and directory. In ESM, the directory would be imported, but in CJS, the file would be imported.

To use to the CommonJS resolution algorithm, use the --experimental-specifier-resolution=node flag.

node --loader @esbuild-kit/esm-loader --experimental-specifier-resolution=node ./file.ts

Sponsors

Premium sponsor banner Premium sponsor banner

Keywords

FAQs

Last updated on 17 Sep 2023

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc